﻿using System;
using Sinacor.Servico.Bovespa.Ordens.BusinessEntity;
using Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Parameter;
using Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response;
using System.ComponentModel;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator
{
    public static class TranslateLoteOrdem
    {
        /// ConsultarLoteVinculadoToParameter
        /// Data: 16/07/2008
        /// Autor: WAbreu.7COMm
        /// Obs.: criação do método
        public static ConsultarLoteVinculadoParameter ConsultarLoteVinculadoToParameter(DataContract.Request.ConsultarLoteVinculadoRequest pRequest)
        {
            ConsultarLoteVinculadoParameter consultarLoteVinculadoParameter = new ConsultarLoteVinculadoParameter();

            consultarLoteVinculadoParameter.ApelidoCliente = pRequest.ApelidoCliente;
            consultarLoteVinculadoParameter.CodigoCasamento = pRequest.CodigoCasamento;
            consultarLoteVinculadoParameter.CodigoCliente = pRequest.CodigoCliente;
            consultarLoteVinculadoParameter.CodigoNegocio = pRequest.CodigoNegocio;
            consultarLoteVinculadoParameter.DataPregao = pRequest.DataPregao;            
            consultarLoteVinculadoParameter.NaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao) pRequest.NaturezaOperacao;
            consultarLoteVinculadoParameter.NumeroConjunto = pRequest.NumeroConjunto;
            consultarLoteVinculadoParameter.PrazoTermo = pRequest.PrazoTermo;
            consultarLoteVinculadoParameter.Discricionaria = pRequest.Discricionaria;

            return consultarLoteVinculadoParameter;
        }
        
        /// <summary>
        /// LoteOrdemToLoteOrdemResponse
        /// este é na verdade um Method-Wrapper para o já existente this.ToResponse()
        /// Data: 16/07/2008 (criação do método) 
        /// Autor: WAbreu.7COMm
        /// </summary> 
        public static List<DataContract.Response.LoteOrdemResponse> LoteOrdemToLoteOrdemResponse(List<BusinessEntity.LoteOrdem> pList)
        {
            return ToResponse(pList);
        }

        public static List<BusinessEntity.LoteOrdem> ToBusinessEntity(List<DataContract.Request.LoteOrdemRequest> pListLoteOrdemRequest)
        {
            if (pListLoteOrdemRequest == null)
                return null;

            List<BusinessEntity.LoteOrdem> internalListAux = new List<BusinessEntity.LoteOrdem>();

            foreach (DataContract.Request.LoteOrdemRequest from in pListLoteOrdemRequest)
            {
                BusinessEntity.LoteOrdem to = new BusinessEntity.LoteOrdem();
                
                to.DataOrdem = from.DataOrdem;
                to.DataPregao = from.DataPregao;
                
                to.NumeroConjunto = from.NumeroConjunto;
                to.NumeroConjuntoDestino = from.NumeroConjuntoDestino;
                to.NumeroSequenciaOrdem = from.NumeroSequenciaOrdem;
                to.NumeroSubSequenciaOrdem = from.NumeroSubSequenciaOrdem;                
                
                internalListAux.Add(to);
            }

            return internalListAux;
        }

        public static List<DataContract.Response.LoteOrdemResponse> ToResponse(List<BusinessEntity.LoteOrdem> pListLoteOrdem)
        {
            if (pListLoteOrdem == null)
                return null;

            List<DataContract.Response.LoteOrdemResponse> internalListAux = new List<DataContract.Response.LoteOrdemResponse>();

            foreach (BusinessEntity.LoteOrdem from in pListLoteOrdem)
            {
                DataContract.Response.LoteOrdemResponse to = new DataContract.Response.LoteOrdemResponse();
                to.DataOrdem = from.DataOrdem;
                to.DataPregao = from.DataPregao;
                to.NomeLote = from.NomeLote;
                
                to.NumeroConjunto = from.NumeroConjunto;
                to.NumeroSequenciaOrdem = from.NumeroSequenciaOrdem;
                to.NumeroSubSequenciaOrdem = from.NumeroSubSequenciaOrdem;
                to.PrecoMedio = from.PrecoMedio;
                to.QuantidadeCasada = from.QuantidadeCasada;

                internalListAux.Add(to);
            }

            return internalListAux;
        } 
    }
}
